﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 方法out参数
{   /// <summary>
    /// out参数。
    ///如果你在一个方法中，返回多个相同类型的值的时候，可以考虑返回一个数组。
    ///但是，如果返回多个不同类型的值的时候，返回数组就不行了，那么这个时候，
    ///我们可以考虑使用out参数。
    ///out参数就侧重于在一个方法中可以返回多个不同类型的值。
    /// </summary>
    class Program
        
    {
        static void Main(string[] args)
        {
            //int[] sum = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            int[] iber={ -1, 2, 3, 4, -5, 6, 7, 8, -9, 10 };
            int 最大值,最小值,值总和,平均值=0;
            Test1(iber, out 最大值, out 最小值, out 值总和, out 平均值);
            Console.WriteLine("最大值:{0}",最大值);
            Console.WriteLine("最小值:{0}",最小值);
            Console.WriteLine("值总和:{0}",值总和);
            Console.WriteLine("平均值:{0}",平均值);
            Console.ReadKey();

        }
        /// <summary>
        /// 计算一个整数数组的最大值 最小值 总和 平均值
        /// </summary>
        /// <param name="num">传递求值数组</param>
        /// <param name="max">返回最大值</param>
        /// <param name="min">返回最小值</param>
        /// <param name="sum">返回值总和</param>
        /// <param name="avg">返回平均值</param>
      static  void Test1(int[] num,out int max,out int min, out int sum,out int avg)
        {
            //out参数要求在方法内部必须为其赋值
            max = int.MinValue;//数组最大值 确保数组里的元素肯定比它小.
            min = int.MaxValue;//数组最小值 确保数组里的元素肯定比它大.
            sum = 0;//数组总和
            for (int i = 0; i < num.Length; i++)
            {
                if (num[i]>max)
                {
                    max = num[i];
                }
                if (num[i]<min)
                {
                    min = num[i];
                }
                sum += num[i];
                
            }
            avg = sum / num.Length;//数组平均值
        }

    }
}
